UrbanSound8K Dataset Exploration¶

In this notebook, we explore the UrbanSound8K dataset, which is a collection of urban sounds categorized into different classes.

Libraries¶

In [3]:
!pip install librosa
Requirement already satisfied: librosa in c:\users\joao silva\appdata\roaming\python\python311\site-packages (0.10.1)
Requirement already satisfied: audioread>=2.1.9 in c:\users\joao silva\appdata\roaming\python\python311\site-packages (from librosa) (3.0.1)
Requirement already satisfied: numpy!=1.22.0,!=1.22.1,!=1.22.2,>=1.20.3 in c:\users\joao silva\anaconda3\lib\site-packages (from librosa) (1.24.4)
Requirement already satisfied: scipy>=1.2.0 in c:\users\joao silva\anaconda3\lib\site-packages (from librosa) (1.11.1)
Requirement already satisfied: scikit-learn>=0.20.0 in c:\users\joao silva\anaconda3\lib\site-packages (from librosa) (1.3.0)
Requirement already satisfied: joblib>=0.14 in c:\users\joao silva\anaconda3\lib\site-packages (from librosa) (1.2.0)
Requirement already satisfied: decorator>=4.3.0 in c:\users\joao silva\anaconda3\lib\site-packages (from librosa) (5.1.1)
Requirement already satisfied: numba>=0.51.0 in c:\users\joao silva\anaconda3\lib\site-packages (from librosa) (0.57.1)
Requirement already satisfied: soundfile>=0.12.1 in c:\users\joao silva\appdata\roaming\python\python311\site-packages (from librosa) (0.12.1)
Requirement already satisfied: pooch>=1.0 in c:\users\joao silva\appdata\roaming\python\python311\site-packages (from librosa) (1.8.0)
Requirement already satisfied: soxr>=0.3.2 in c:\users\joao silva\appdata\roaming\python\python311\site-packages (from librosa) (0.3.7)
Requirement already satisfied: typing-extensions>=4.1.1 in c:\users\joao silva\anaconda3\lib\site-packages (from librosa) (4.7.1)
Requirement already satisfied: lazy-loader>=0.1 in c:\users\joao silva\anaconda3\lib\site-packages (from librosa) (0.2)
Requirement already satisfied: msgpack>=1.0 in c:\users\joao silva\anaconda3\lib\site-packages (from librosa) (1.0.3)
Requirement already satisfied: llvmlite<0.41,>=0.40.0dev0 in c:\users\joao silva\anaconda3\lib\site-packages (from numba>=0.51.0->librosa) (0.40.0)
Requirement already satisfied: platformdirs>=2.5.0 in c:\users\joao silva\anaconda3\lib\site-packages (from pooch>=1.0->librosa) (3.10.0)
Requirement already satisfied: packaging>=20.0 in c:\users\joao silva\anaconda3\lib\site-packages (from pooch>=1.0->librosa) (23.1)
Requirement already satisfied: requests>=2.19.0 in c:\users\joao silva\anaconda3\lib\site-packages (from pooch>=1.0->librosa) (2.31.0)
Requirement already satisfied: threadpoolctl>=2.0.0 in c:\users\joao silva\anaconda3\lib\site-packages (from scikit-learn>=0.20.0->librosa) (2.2.0)
Requirement already satisfied: cffi>=1.0 in c:\users\joao silva\anaconda3\lib\site-packages (from soundfile>=0.12.1->librosa) (1.15.1)
Requirement already satisfied: pycparser in c:\users\joao silva\anaconda3\lib\site-packages (from cffi>=1.0->soundfile>=0.12.1->librosa) (2.21)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\joao silva\anaconda3\lib\site-packages (from requests>=2.19.0->pooch>=1.0->librosa) (2.0.4)
Requirement already satisfied: idna<4,>=2.5 in c:\users\joao silva\anaconda3\lib\site-packages (from requests>=2.19.0->pooch>=1.0->librosa) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\joao silva\anaconda3\lib\site-packages (from requests>=2.19.0->pooch>=1.0->librosa) (1.26.16)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\joao silva\anaconda3\lib\site-packages (from requests>=2.19.0->pooch>=1.0->librosa) (2023.7.22)
In [20]:
# Libraries
import os
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import IPython as IP
import IPython.display as ipd
import struct
import librosa
import librosa.display

Set Working Directory and Define Paths¶

In [5]:
# Diretory
os.chdir(r'Downloads/')
In [6]:
# Paths
urbansound8_path = os.path.abspath('./UrbanSound8K' )
metadata_path = os.path.join(urbansound8_path, 'metadata/UrbanSound8K.csv')
audio_path = os.path.join(metadata_path, 'audio')

Load Metadata¶

In [7]:
# Load dataframe
metadata = pd.read_csv(metadata_path)
# Visualize it
metadata.head()
Out[7]:
slice_file_name fsID start end salience fold classID class
0 100032-3-0-0.wav 100032 0.0 0.317551 1 5 3 dog_bark
1 100263-2-0-117.wav 100263 58.5 62.500000 1 5 2 children_playing
2 100263-2-0-121.wav 100263 60.5 64.500000 1 5 2 children_playing
3 100263-2-0-126.wav 100263 63.0 67.000000 1 5 2 children_playing
4 100263-2-0-137.wav 100263 68.5 72.500000 1 5 2 children_playing
In [8]:
metadata.shape
Out[8]:
(8732, 8)

Data Exploration¶

In [9]:
# Checking for null values
metadata.isnull().sum()
Out[9]:
slice_file_name    0
fsID               0
start              0
end                0
salience           0
fold               0
classID            0
class              0
dtype: int64
In [10]:
# Class distribution
metadata['class'].value_counts()
Out[10]:
class
dog_bark            1000
children_playing    1000
air_conditioner     1000
street_music        1000
engine_idling       1000
jackhammer          1000
drilling            1000
siren                929
car_horn             429
gun_shot             374
Name: count, dtype: int64
In [11]:
# Plotting the bar chart for the previous class distribution
class_distribution = metadata['class'].value_counts()
class_distribution.plot(kind='bar', color='green', edgecolor='black')
plt.title('Class Distribution')
plt.xlabel('Class Labels')
plt.ylabel('Count')
plt.show()
In [24]:
def visualize(audio_file_path):
    audio_data, sample_rate = librosa.load(audio_file_path)
    print(audio_data)
    print(sample_rate)
    plt.figure(figsize=(12,4)) 
    librosa.display.waveshow(audio_data, sr = sample_rate)

Visualize and compare the different sounds¶

Air conditioner¶

In [42]:
file = "UrbanSound8K/audio/fold5/100852-0-0-0.wav"
ipd.Audio(file)
Out[42]:
Your browser does not support the audio element.
In [43]:
visualize(file)
[-5.8207661e-11 -2.2919266e-10  7.2759576e-11 ...  7.3682986e-02
  1.6879775e-02  2.1070618e-02]
22050

Car horn¶

In [39]:
file = "UrbanSound8K/audio/fold10/100648-1-0-0.wav"
ipd.Audio(file)
Out[39]:
Your browser does not support the audio element.
In [40]:
visualize(file)
[-6.9849193e-09 -3.2596290e-09 -3.7252903e-09 ...  1.8561384e-02
  2.6891200e-02  3.4412306e-02]
22050

Children playing¶

In [30]:
file = "UrbanSound8K/audio/fold1/15564-2-0-0.wav"
ipd.Audio(file)
Out[30]:
Your browser does not support the audio element.
In [31]:
visualize(file)
[-2.5611371e-08 -2.5727786e-08  9.9127647e-08 ... -1.2294231e-03
  1.9766562e-02  8.7687606e-04]
22050

Dog bark¶

In [28]:
file = "UrbanSound8K/audio/fold1/7383-3-0-0.wav"
ipd.Audio(file)
Out[28]:
Your browser does not support the audio element.
In [29]:
visualize(file)
[ 3.4924597e-10  3.4924597e-10  4.6566129e-10 ... -7.9498515e-03
 -7.7366987e-03 -8.0531817e-03]
22050

Drilling¶

In [45]:
file = "UrbanSound8K/audio/fold3/103199-4-0-0.wav"
ipd.Audio(file)
Out[45]:
Your browser does not support the audio element.
In [46]:
visualize(file)
[-5.4569682e-12  0.0000000e+00  0.0000000e+00 ... -1.3928816e-01
 -1.5356672e-01 -1.2940323e-01]
22050

Engine idling¶

In [48]:
file = "UrbanSound8K/audio/fold10/102857-5-0-0.wav"
ipd.Audio(file)
Out[48]:
Your browser does not support the audio element.
In [49]:
visualize(file)
[ 0.04120485  0.05975429  0.0499529  ... -0.16023785 -0.15017799
 -0.15818192]
22050

Gunshot¶

In [26]:
file = "UrbanSound8K/audio/fold1/7061-6-0-0.wav"
ipd.Audio(file)
Out[26]:
Your browser does not support the audio element.
In [27]:
visualize(file)
[-7.4505806e-09  2.9802322e-08  4.8428774e-08 ...  1.0127544e-05
  2.3271263e-05  7.0009992e-06]
22050

Jackhammer¶

In [51]:
file = "UrbanSound8K/audio/fold1/103074-7-0-0.wav"
ipd.Audio(file)
Out[51]:
Your browser does not support the audio element.
In [52]:
visualize(file)
[0.00172808 0.00507184 0.00622941 ... 0.02601299 0.02759236 0.02479804]
22050

Siren¶

In [54]:
file = "UrbanSound8K/audio/fold7/102853-8-0-0.wav"
ipd.Audio(file)
Out[54]:
Your browser does not support the audio element.
In [55]:
visualize(file)
[0.05394325 0.07814638 0.05879006 ... 0.0597401  0.0812359  0.11938579]
22050

Street music¶

In [32]:
file = "UrbanSound8K/audio/fold1/21684-9-0-7.wav"
ipd.Audio(file)
Out[32]:
Your browser does not support the audio element.
In [33]:
visualize(file)
[ 0.01116233  0.01808932  0.01532043 ... -0.08766752 -0.10189103
 -0.11817991]
22050